其他
语音机器人SIP通话场景下如何捕获用户电话按键信号
导读
随着互联网技术的发展的网络的普及,线上告警已经由早期的短信/邮件通知发展为微信/电话语音等方式,由于短信/邮件等告警方式存在延时问题,不能及时告知被通知对象,业内开始流行将服务器接收到的告警内容通过TTS(语音合成)合成语音后告知用户,用户按键选择主动处理或移交给其他负责人。
背景
整体流程
如何传输
SIPINFO
RFC2833
INBAND
如何识别
A先发送INVITE请求至代理服务器(一般为SIP运营商提供),代理服务器将INVITE请求转发给B; 代理服务器给A返回呼叫处理中的100 TRYING应答消息; B向代理服务器发送呼叫处理中的100 TRYING应答消息; B发现用户振铃后,向代理服务器发送180 RINGING振铃消息,代理服务器收到后转发给A; B发现用户接听后,向代理服务器发送200 OK消息表示连接成功,代理服务器将200 OK转发给A; A收到请求后,发送ACK消息进行确认,代理服务器再将ACK消息转发给B; 主被叫用户之间建立通信连接,开始通信;
c表示连接信息,用于约定IP协议版本、IP地址等信息; a表示会话信息,用于约定会话使用的编解码器、按键事件(telephone-event)的RTP包包头等信息; m表示媒体信息,用于约定会话为音频或视频通话、接收媒体流的端口等信息;
在会话建立过程中,主叫向被叫发送INVITE请求时携带SDP协议,约定主叫接收媒体流的IP地址及端口、编解码器、按键事件等信息; 在被叫给主叫回复180 RINGING振铃消息时携带SDP协议,同样也约定了被叫的相关信息; 主被叫通信建立,按照SDP协议约定的媒体信息进行通信;
在接收RTP包时,当包头PT=126时,RTP包体中存储的内容即为按键信息; 由于RTP是基于UDP协议封装的,为了防止丢包,同一个按键信号会产生多个RTP包且包头中Timestamp相同,我们可根据包头的时间戳去重; 至此我们就可以成功解析基于SIP的电话按键信号;
总结
福利环节
为了鼓励优质内容传播,【58技术】公众号近期会持续推出不定期活动奖励。
留言区发表话题#我眼中的语音机器人#,即可参与此次活动
活动奖励:抽取留言点赞前三名,送出定制版代码台历
活动时间:截至2020年12月30日。